﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace AsTekMobile
{
    public partial class frmHizmetFat : Form
    {
        public CariBilgi Cari { get; set; }
        public string AracKodu { get; set; }
        public int ServisID { get; set; }

        public frmHizmetFat()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (Sip.Visible)
            {
                Sip.Visible = false;
            }
            else
            {
                Sip.Visible = true;
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Hesapla()
        {
            decimal kdvHaric = 0;
            decimal kdvDahil = 0;
            decimal kdvOran = 0;
            decimal fiyat = 0;

            for (int i = 1; i < grdHizmetKart.Rows.Count; i++)
            {
                if (Cevir.Parse<bool>(grdHizmetKart[i, 7]))
                {
                    kdvOran = Cevir.Parse<decimal>(grdHizmetKart[i, 6]);
                    fiyat = Cevir.Parse<decimal>(grdHizmetKart[i, 4]);
                    kdvDahil += fiyat;
                    kdvHaric += (fiyat / ((100m + kdvOran) / 100m));
                }
            }
            txtKdvDahil.Text = kdvDahil.ToString("n2");
            txtKdvHaric.Text = kdvHaric.ToString("n2");
        }

        private void frmHizmetFat_Load(object sender, EventArgs e)
        {
            grdHizmetKart.DataSource = Database.ctor.HizmetKartlari;
            grdHizmetKart.Cols[0].Visible = false;
            grdHizmetKart.Cols[1].Visible = false;
            grdHizmetKart.Cols[3].Visible = false;
            grdHizmetKart.Cols[5].Visible = false;
            grdHizmetKart.Cols[6].Visible = false;
            grdHizmetKart.AutoSizeCols();
        }

        private void grdHizmetKart_AfterEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
        {
            Hesapla();
        }

        private void EvrakKaydet()
        {
            User usr = Database.ctor.Kullanicilar.Where(x => x.ID == Cevir.Parse<int>(Program.Session[Settings.TeknikServisID])).FirstOrDefault();
            frmBelgeNo frm = new frmBelgeNo();
            frm.EvrakCinsi = EvrakTipleri.HizmetFaturasi;
            frm.Cari = this.Cari;
            frm.KdvDahilTutar = txtKdvDahil.Text;
            frm.KdvHaricTutar = txtKdvHaric.Text;

            if (frm.ShowDialog() == DialogResult.OK)
            {
                Evrak evr = new Evrak();
                evr.DbNo = usr.DbNo;
                evr.ServisID = ServisID;
                evr.EvrakSeriGirildi = true;
                evr.CariKodu = Cari.CariKodu;
                evr.CikisDepoNo = usr.DepoNo;
                evr.EvrakCinsi = EvrakTipleri.HizmetFaturasi;
                evr.FirmaNo = Cevir.Parse<int>(usr.FirmaNo);
                evr.GirisDepoNo = usr.DepoNo;
                evr.MikroKullanici = usr.MikroKullanici;
                evr.PlasiyerKodu = usr.Plasiyer;
                evr.Seri = frm.EvrakSeri;
                evr.Sira = frm.EvrakSira;
                evr.BelgeNo = frm.EvrakBelgeNo;
                evr.SrmMerkezKodu = usr.SrmMerkezi;
                evr.SubeNo = Cevir.Parse<int>(usr.SubeNo);
                evr.Tarih = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
                evr.AracKodu = AracKodu;

                decimal kdvOran = 0;
                int kdvSira = 0;
                decimal fiyat = 0;
                string hizmetKodu = "";
                HareketBilgileri hiz;
                int satir = 0;

                for (int i = 1; i < grdHizmetKart.Rows.Count; i++)
                {
                    if (Cevir.Parse<bool>(grdHizmetKart[i, 7]))
                    {
                        hizmetKodu = grdHizmetKart[i, 3].ToString();
                        kdvOran = Cevir.Parse<decimal>(grdHizmetKart[i, 6]);
                        kdvSira = Cevir.Parse<int>(grdHizmetKart[i, 5]);
                        fiyat = Cevir.Parse<decimal>(grdHizmetKart[i, 4]);

                        hiz = new HareketBilgileri();
                        hiz.Barkod = "";
                        hiz.BurutTutar = fiyat;
                        hiz.Fiyat = fiyat;
                        hiz.Miktar = 1;
                        hiz.Satir = satir;
                        hiz.KdvSira = kdvSira;
                        hiz.KdvOrani = kdvOran;
                        hiz.KdvTutari = (fiyat - (fiyat / ((100m + kdvOran) / 100m)));
                        hiz.SeriNolar = new string[] { };
                        hiz.SipDbcNo = 0;
                        hiz.SipRecNo = 0;
                        hiz.StokAdi = "";
                        hiz.StokKodu = hizmetKodu;
                        evr.Rows.Add(hiz);
                        satir++;
                    }
                }

                bool result = Database.ctor.SaveHizmetFat(evr);
                if (result == false)
                {
                    MessageBox.Show("Kaydedilemedi ! tekrar deneyiniz !");
                }
                else
                {
                    DialogResult dlg = MessageBox.Show("Yazdırmak istermisiniz ?", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                    if (dlg == DialogResult.Yes)
                    {
                        print(evr.Seri, evr.Sira,frm.CariBilgileriYazdir);
                    }
                }
            }
        }

        private void print(string seri, int sira,bool cariBilgi)
        {
            string data = Database.ctor.PrintFat(seri, sira, 0, cariBilgi);
            if (!string.IsNullOrEmpty(data))
                print(data);
            else
            {
                if (MessageBox.Show("Sunucudan bilgi alınamadı ! Tekrar denensin mi ?", "dikkat", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                {
                    print(seri, sira, cariBilgi);
                }
            }
        }
        private void print(string veri)
        {
            if (!string.IsNullOrEmpty(veri))
            {
                if (!Printing.Print(veri))
                {
                    if (MessageBox.Show("Yazdırılamadı ! Tekrar yazdırılsın mı ?", "dikkat", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                    {
                        print(veri);
                    }
                    else
                        this.Close();
                }
                else
                    this.Close();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DialogResult rs = MessageBox.Show("Kaydetmek istermisiniz ?", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
            if (rs == DialogResult.Yes)
            {
                EvrakKaydet();
            }
        }
    }
}